package com.ukee.birthday.common.utils;


import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.*;

public class ExcelUtil {

    /**
     * 创建excel并导出数据到excel中
     * @param response 流
     * @param list 数据
     * @param tab 页签
     * @param title 标题
     * @param fileName 导出的文件名
     * @throws IOException
     */
//    public static void exportExcel(HttpServletResponse response, List<List<Map<String,Object>>> list, List<List<String>> tab, List<List<String>> title, String fileName) throws IOException {
//        //实例化HSSFWorkbook
//        HSSFWorkbook workbook = new HSSFWorkbook();
//        for (int p = 0; p < tab.size(); p++) {
//            for (int i = 0; i <tab.get(p).size(); i++) {
//                //创建一个Excel表单，参数为sheet的名字
//                HSSFSheet sheet = workbook.createSheet(tab.get(p).get(i));
//                //设置表格列宽度为10个字节
//                sheet.setDefaultColumnWidth(10);
//                //创建标题的显示样式
//                HSSFCellStyle headerStyle = workbook.createCellStyle();
//                headerStyle.setFillForegroundColor(IndexedColors.WHITE.index);
//                headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//                headerStyle.setBorderBottom(BorderStyle.THIN);
//                headerStyle.setBorderTop(BorderStyle.THIN);
//                headerStyle.setBorderLeft(BorderStyle.THIN);
//                headerStyle.setBorderRight(BorderStyle.THIN);
//                //创建第一行表头
//                HSSFRow headrow = sheet.createRow(0);
//                //遍历添加标题
//                for (int j = 0; j <title.get(p).size(); j++) {
//                    //创建一个单元格
//                    HSSFCell cell = headrow.createCell(j);
//                    //创建一个内容对象
//                    HSSFRichTextString text = new HSSFRichTextString(title.get(p).get(j));
//                    //将内容对象的文字内容写入到单元格中
//                    cell.setCellValue(text);
//                    cell.setCellStyle(headerStyle);
//                }
//                //添加数据
//                for (int j = 0; j <list.get(p).size(); j++) {
//                    //创建一行
//                    int rownum = j + 1;
//                    HSSFRow row1 = sheet.createRow(rownum);
//                    //找到key
//                    Set<String> key = list.get(p).get(j).keySet();
//                    int colum = 0;
//                    //循环key将value值存储到excel中
//                    for(String s : key){
//                        String value = "";
//                        if (list.get(p).get(j).get(s) != null) {
//                            value = list.get(p).get(j).get(s).toString();
//                        }
//                        if (s.equals("picUrl") || s.contains("url")) {
//                            if (!StringUtils.isEmpty(value)) {
//
//                                // 先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray
//                                ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//                                //将两张图片读到BufferedImage
//                                File file = new File(value);
//                                if (file.exists()) {
//                                    BufferedImage bufferImg = ImageIO.read(new File(value));
//                                    //图片类型
//                                    String hou  = value.substring(value.length() - 3, value.length());
//                                    ImageIO.write(bufferImg, hou, byteArrayOut);
//                                    HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
//                                    /**
//                                     * 该构造函数有8个参数
//                                     * 前四个参数是控制图片在单元格的位置，分别是图片距离单元格left，top，right，bottom的像素距离
//                                     * 后四个参数，前连个表示图片左上角所在的cellNum和 rowNum，后两个参数对应的表示图片右下角所在的cellNum和 rowNum，
//                                     * excel中的cellNum和rowNum的index都是从0开始的
//                                     *
//                                     */
//                                    //图片一导出到单元格A1中   参数：
//                                    HSSFClientAnchor anchor = new HSSFClientAnchor(20, 20, 20, 20,(short) colum, rownum, (short) (colum + 1), (rownum + 1));
//                                    // 插入图片
//                                    patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
//                                }
//                            }
//                            colum++;
//                        } else {
//                            HSSFCell rowCell = row1.createCell(colum++);
//                            rowCell.setCellValue(new HSSFRichTextString(value));
//                            rowCell.setCellStyle(headerStyle);
//                        }
//                    }
//                }
//                //给Excel设置水印
//                String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//                String content = CommonUtil.getEmployeeCard() + CommonUtil.getCreatorName() + date;
//                painWaterMark(workbook, sheet,content, 4);
//            }
//        }
//        //准备将Excel的输出流通过response输出到页面下载
//        //输出流
//        response.setContentType("application/octet-stream");
//        response.setCharacterEncoding("utf-8");
//        //这后面可以设置导出Excel的名称（解决文件名称乱码问题）
//        response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xls" );
//        //刷新缓冲
//        response.flushBuffer();
//        //workbook将Excel写入到response的输出流中，供页面下载
//        workbook.write(response.getOutputStream());
//    }


    /**
     * 创建excel并导出数据到excel中
     * @param response 流
     * @param list 数据
     * @param tab 页签
     * @param title 标题
     * @param fileName 导出的文件名
     * @throws IOException
     */
//    public static void exportExcelV2(HttpServletResponse response, List<List<Map<String,Object>>> list, List<List<String>> tab, List<List<String>> title, String fileName) throws IOException {
//        //实例化HSSFWorkbook
//        HSSFWorkbook workbook = new HSSFWorkbook();
//        for (int p = 0; p < tab.size(); p++) {
//            for (int i = 0; i <tab.get(p).size(); i++) {
//                //创建一个Excel表单，参数为sheet的名字
//                HSSFSheet sheet = workbook.createSheet(tab.get(p).get(i));
//                //设置表格列宽度为10个字节
//                sheet.setDefaultColumnWidth(10);
//                //创建标题的显示样式
//                HSSFCellStyle headerStyle = workbook.createCellStyle();
//                headerStyle.setFillForegroundColor(IndexedColors.WHITE.index);
//                headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//                headerStyle.setBorderBottom(BorderStyle.THIN);
//                headerStyle.setBorderTop(BorderStyle.THIN);
//                headerStyle.setBorderLeft(BorderStyle.THIN);
//                headerStyle.setBorderRight(BorderStyle.THIN);
//                //创建第一行表头
//                HSSFRow headrow = sheet.createRow(0);
//                //遍历添加标题
//                for (int j = 0; j <title.get(p).size(); j++) {
//                    //创建一个单元格
//                    HSSFCell cell = headrow.createCell(j);
//                    //创建一个内容对象
//                    HSSFRichTextString text = new HSSFRichTextString(title.get(p).get(j));
//                    //将内容对象的文字内容写入到单元格中
//                    cell.setCellValue(text);
//                    cell.setCellStyle(headerStyle);
//                }
//                //添加数据
//                for (int j = 0; j <list.get(p).size(); j++) {
//                    //创建一行
//                    int rownum = j + 1;
//                    HSSFRow row1 = sheet.createRow(rownum);
//                    //找到key
//                    Set<String> key = list.get(p).get(j).keySet();
//                    int colum = 0;
//                    //循环key将value值存储到excel中
//                    for(String s : key){
//                        String value = "";
//                        if (list.get(p).get(j).get(s) != null) {
//                            value = list.get(p).get(j).get(s).toString();
//                        }
//                        if (s.equals("picUrl") || s.contains("url")) {
//                            if (!StringUtils.isEmpty(value)) {
//
//                                // 先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray
//                                ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//                                //将两张图片读到BufferedImage
//                                File file = new File(value);
//                                if (file.exists()) {
//                                    BufferedImage bufferImg = ImageIO.read(new File(value));
//                                    //图片类型
//                                    String hou  = value.substring(value.length() - 3, value.length());
//                                    ImageIO.write(bufferImg, hou, byteArrayOut);
//                                    HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
//                                    /**
//                                     * 该构造函数有8个参数
//                                     * 前四个参数是控制图片在单元格的位置，分别是图片距离单元格left，top，right，bottom的像素距离
//                                     * 后四个参数，前连个表示图片左上角所在的cellNum和 rowNum，后两个参数对应的表示图片右下角所在的cellNum和 rowNum，
//                                     * excel中的cellNum和rowNum的index都是从0开始的
//                                     *
//                                     */
//                                    //图片一导出到单元格A1中   参数：
//                                    HSSFClientAnchor anchor = new HSSFClientAnchor(20, 20, 20, 20,(short) colum, rownum, (short) (colum + 1), (rownum + 1));
//                                    // 插入图片
//                                    patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
//                                }
//                            }
//                            colum++;
//                        } else {
//                            HSSFCell rowCell = row1.createCell(colum++);
//                            rowCell.setCellValue(new HSSFRichTextString(value));
//                            rowCell.setCellStyle(headerStyle);
//                        }
//                    }
//                }
//                //给Excel设置水印
//                String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//                String content = CommonUtil.getEmployeeCard() + CommonUtil.getCreatorName() + date;
//                painWaterMark(workbook, sheet,content, 4);
//            }
//        }
//        //准备将Excel的输出流通过response输出到页面下载
//        //输出流
//        //浏览器下载excel
//        String filename = "项目评审表.xls";
//        FileOutputStream fos = new FileOutputStream(filename);
//        workbook.write(fos);
//        fos.flush();
//        fos.close();
//
//            response.setContentType("application/vnd.ms-excel");
//            response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(filename, "utf-8"));
//            OutputStream outputStream = response.getOutputStream();
//            workbook.write(outputStream);
//            outputStream.flush();
//            outputStream.close();
//
////        response.setContentType("application/octet-stream");
////        response.setCharacterEncoding("utf-8");
////        //这后面可以设置导出Excel的名称（解决文件名称乱码问题）
////        response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xls" );
//////        response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
////        //刷新缓冲
////        response.flushBuffer();
////        //workbook将Excel写入到response的输出流中，供页面下载
////        workbook.write(response.getOutputStream());
//    }

    /**
     * 创建excel并导出数据到excel中(按列导出)
     * @param response 流
     * @param list 数据
     * @param tab 页签
     * @param fileName 导出的文件名
     * @throws IOException
     */
//    public static void exportByColumn(HttpServletResponse response, List<List<Map<String,Object>>> list, List<List<String>> tab, String fileName) throws IOException {
//        //实例化HSSFWorkbook
//        HSSFWorkbook workbook = new HSSFWorkbook();
//        for (int p = 0; p < tab.size(); p++) {
//            for (int i = 0; i <tab.get(p).size(); i++) {
//                //创建一个Excel表单，参数为sheet的名字
//                HSSFSheet sheet = workbook.createSheet(tab.get(p).get(i));
//                //设置表格列宽度为10个字节
//                sheet.setDefaultColumnWidth(25);
//                //创建标题的显示样式
//                HSSFCellStyle headerStyle = workbook.createCellStyle();
//                headerStyle.setFillForegroundColor(IndexedColors.WHITE.index);
//                headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//                headerStyle.setBorderBottom(BorderStyle.THIN);
//                headerStyle.setBorderTop(BorderStyle.THIN);
//                headerStyle.setBorderLeft(BorderStyle.THIN);
//                headerStyle.setBorderRight(BorderStyle.THIN);
//
//                //添加数据
//                for (int j = 0; j <list.get(p).size(); j++) {
//                    Map<String, Object> map = list.get(p).get(j);
//                    if (map != null) {
//                        int rowNum = 0;
//                        for (String key : map.keySet()) {
//                            HSSFRow row1 = null;
//                            if (j == 0) {
//                                row1 = sheet.createRow(rowNum);
//                            } else {
//                                row1 = sheet.getRow(rowNum);
//                            }
//
//                            String value = "";
//                            if (!StringUtils.isEmpty(map.get(key))) {
//                                value = map.get(key).toString();
//                            }
//                            if (key.equals("picUrl") || key.contains("url")) {
//                                row1.setHeight((short) 2000);
//                                if (!StringUtils.isEmpty(value)) {
//                                    // 先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray
//                                    ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//                                    //将两张图片读到BufferedImage
//                                    File file = new File(value);
//                                    if (file.exists()) {
//                                        BufferedImage bufferImg = ImageIO.read(new File(value));
//                                        //图片类型
//                                        String hou  = value.substring(value.length() - 3, value.length());
//                                        ImageIO.write(bufferImg, hou, byteArrayOut);
//                                        HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
//                                        /**
//                                         * 该构造函数有8个参数
//                                         * 前四个参数是控制图片在单元格的位置，分别是图片距离单元格left，top，right，bottom的像素距离
//                                         * 后四个参数，前连个表示图片左上角所在的cellNum和 rowNum，后两个参数对应的表示图片右下角所在的cellNum和 rowNum，
//                                         * excel中的cellNum和rowNum的index都是从0开始的
//                                         *
//                                         */
//                                        //图片一导出到单元格A1中   参数：
//                                        HSSFClientAnchor anchor = new HSSFClientAnchor(20, 20, 20, 20,(short) j, rowNum, (short) (j + 1), (rowNum + 1));
//                                        // 插入图片
//                                        patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
//                                    }
//                                }
//                            } else {
//                                HSSFCell rowCell = row1.createCell(j);
//                                rowCell.setCellValue(new HSSFRichTextString(value));
//                                rowCell.setCellStyle(headerStyle);
//                            }
//
//                            rowNum++;
//                        }
//                    }
//                }
//
//                //给Excel设置水印
//                String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//                String content = CommonUtil.getEmployeeCard() + CommonUtil.getCreatorName() + date;
//                painWaterMark(workbook, sheet,content,2);
//            }
//        }
//        //准备将Excel的输出流通过response输出到页面下载
//        //输出流
//        response.setContentType("application/octet-stream");
//        response.setCharacterEncoding("utf-8");
//        //这后面可以设置导出Excel的名称（解决文件名称乱码问题）
//        response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xls" );
//        //刷新缓冲
//        response.flushBuffer();
//        //workbook将Excel写入到response的输出流中，供页面下载
//        workbook.write(response.getOutputStream());
//    }
    /**
     * 根据文档格式返回相应的文档对象
     * @param file
     * @param pattern 文档格式：xls，xlsx
     * @return
     */
    public static Workbook readExcel(MultipartFile file, String pattern) {
        // 文档对象
        Workbook workbook = null;
        if (file != null) {
            try {
                // 获取输入流
                InputStream is = file.getInputStream();
                if ("xls".equals(pattern)) {
                    // 2003版格式-xls
                    return workbook = new HSSFWorkbook(is);
                } else if ("xlsx".equals(pattern)) {
                    // 2007及以上版本格式-xlsx
                    return workbook = new XSSFWorkbook(is);
                } else {
                    return null;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return workbook;
    }

    /**
     * 判断上传的文件是否是excel文件
     * @param file
     * @return
     */
    public static Boolean isEXCEL(MultipartFile file) {
        if (file != null) {
            // 文件名
            String fileName = file.getOriginalFilename();
            // 文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            // 转小写
            suffix = suffix.toLowerCase();
            if ("xls".equals(suffix) || "xlsx".equals(suffix)) {
                return true;
            }
        }
        return false;
    }

    public static List<List<String>> readExcelContents(MultipartFile file, String pattern, Integer column) {
        List<List<String>> listRow = new ArrayList<>();
        // 文档对象
        Workbook workbook = null;
        // 表格对象
        Sheet sheet = null;
        // 非空和文件格式判断
        if (isEXCEL(file)) {
            workbook = readExcel(file, pattern);
        }
        if (workbook != null) {
            // 获取文档首个表格
//            sheet = workbook.getSheetAt(1);
            sheet = workbook.getSheetAt(0);
            // 获取最大行数
            int rowNum = sheet.getPhysicalNumberOfRows();
            // 行对象
            Row row = null;
            // 单元格数据
            String cellData = null;
            // 跳过第一行标题栏
            for (int i = 1; i < rowNum; i++) {
                row = sheet.getRow(i);
                List<String> listCell = new ArrayList<>();
                if (StringUtils.isEmpty(row.getCell(0).toString())) {
                    break;
                }
                // 遍历列
                for (int j = 0; j < column; j++) {
                    Cell cell = row.getCell(j);
                    CellType cellType = cell.getCellTypeEnum();
                    if(cellType.getCode() == 0){
                        if (DateUtil.isCellDateFormatted(cell)) {
                            //用于转化为日期格式
                            Date d = cell.getDateCellValue();
                            DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                            cellData = formater.format(d);
                        }else {
//                            cellData = cell.toString();
                            DecimalFormat df = new DecimalFormat("#");
                            cellData = df.format(cell.getNumericCellValue());
                        }
                    }else {
                        cellData = cell.toString();
                    }

//                    if (DateUtil.isCellDateFormatted(cell)) {
//                        System.out.println("bbbbbbbbbbbbbbb");
//                        //用于转化为日期格式
//                        Date d = cell.getDateCellValue();
//                        System.out.println("ccccccccc");
//                        DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
//                        cellData = formater.format(d);
//                    }else {
//
//                        System.out.println("ddddddddddddddd");
//                        cellData = cell.toString();
//                    }

                    listCell.add(cellData);
                }

                listRow.add(listCell);
            }
        }
        return listRow;
    }

    public static List<String> readExcelTitle(MultipartFile file, String pattern, Integer column) {
        List<String> title = new ArrayList<>();
        // 文档对象
        Workbook workbook = null;
        // 表格对象
        Sheet sheet = null;
        // 非空和文件格式判断
        if (isEXCEL(file)) {
            workbook = readExcel(file, pattern);
        }
        if (workbook != null) {
            // 获取文档首个表格
            sheet = workbook.getSheetAt(1);
            // 获取最大行数
            int rowNum = sheet.getPhysicalNumberOfRows();
            // 行对象
            Row row = null;
            // 单元格数据
            String cellData = null;
            // 跳过第一行标题栏
            row = sheet.getRow(0);
            if (!StringUtils.isEmpty(row.getCell(0).toString())) {
                // 遍历列
                for (int i = 0; i < column; i++) {
                    cellData = row.getCell(i).toString();
                    title.add(cellData.replace("\n", ""));
                }
            }
        }
        return title;
    }

    /**
     * 给Excel添加水印
     * @param wb 工作簿
     * @param sheet  sheet页
     * @param content 水印内容
     */
//    private static void painWaterMark(Workbook wb,Sheet sheet,String content, int col) {
//        String imgFileName = "waterMark_photo_"+content+".png";
//        //创建水印图片（默认保存到classes目录下）
//        imgFileName = createWaterMark(content, imgFileName);
//        //将图片写入到excel中
//        try {
//            //也可以动态获取sheet中的行和列，根据行和列适当的放置水印图片
//            //获取excel实际所占行
//            int row = sheet.getFirstRowNum() + sheet.getLastRowNum();
//            //获取excel实际所占列
//            int cell = sheet.getRow(sheet.getFirstRowNum()).getLastCellNum() + 1;
//            int XCount = cell/col;
//            int YCount = row/col;
//            putWaterRemarkToExcel(wb, sheet, imgFileName, 0, 0, 2, 2, XCount, YCount, 2, 2);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

    /**
     * 创建水印图片
     * 注意：生成的图片会默认保存到classes目录下，可以根据自己的业务进行更改
     * @param content
     * @param fileName
     * @return
     * @throws IOException
     */
    private static String createWaterMark(String content, String fileName) {
        //生成水印图片的宽度
        Integer width = 300;
        //水印图片的高度
        Integer height = 50;
        // 获取bufferedImage对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        String fontType = "宋体";
        Integer fontStyle = Font.PLAIN;
        Integer fontSize = 12;
        Font font = new Font(fontType, fontStyle, fontSize);
        // 获取Graphics2d对象
        Graphics2D g2d = image.createGraphics();
        image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
        g2d.dispose();
        g2d = image.createGraphics();
        g2d.setColor(new Color(0, 0, 0, 80)); //设置字体颜色和透明度
        // 设置字体
        g2d.setStroke(new BasicStroke(1));
        // 设置字体类型  加粗 大小
        g2d.setFont(font);
        //设置倾斜度
        g2d.rotate(Math.toRadians(-10), (double) image.getWidth() / 2, (double) image.getHeight() / 2);
        FontRenderContext context = g2d.getFontRenderContext();
        Rectangle2D bounds = font.getStringBounds(content, context);
        double x = (width - bounds.getWidth()) / 2;
        double y = (height - bounds.getHeight()) / 2;
        double ascent = -bounds.getY();
        double baseY = y + ascent;
        // 写入水印文字原定高度过小，所以累计写水印，增加高度
        g2d.drawString(content, (int) x, (int) baseY);
        // 设置透明度
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
        // 释放对象
        g2d.dispose();

        String targetImagePath = Thread.currentThread().getContextClassLoader().getResource("").getPath()+fileName;
        try {
            File tmpDir = new File(targetImagePath);
            if (!tmpDir.exists()) {
                tmpDir.mkdirs();
            }
            ImageIO.write(image, "png", tmpDir);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return targetImagePath;
    }

    /**
     * 为Excel打上水印工具函数 请自行确保参数值，以保证水印图片之间不会覆盖。在计算水印的位置的时候，并没有考虑到单元格合并的情况，请注意
     * @param wb Excel Workbook
     * @param sheet 需要打水印的Excel
     * @param waterRemarkPath 水印地址，classPath，目前只支持png格式的图片，
     *                        因为非png格式的图片打到Excel上后可能会有图片变红的问题，且不容易做出透明效果。
     *                        同时请注意传入的地址格式，应该为类似："\\excelTemplate\\test.png"
     * @param startXCol 水印起始列
     * @param startYRow 水印起始行
     * @param betweenXCol 水印横向之间间隔多少列
     * @param betweenYRow 水印纵向之间间隔多少行
     * @param XCount 横向共有水印多少个
     * @param YCount 纵向共有水印多少个
     * @param waterRemarkWidth 水印图片宽度为多少列
     * @param waterRemarkHeight 水印图片高度为多少行
     * @throws IOException
     */
//    private static void putWaterRemarkToExcel(Workbook wb, Sheet sheet, String waterRemarkPath, int startXCol,
//                                              int startYRow, int betweenXCol, int betweenYRow, int XCount, int YCount, int waterRemarkWidth,
//                                              int waterRemarkHeight) throws IOException {
//        // 校验传入的水印图片格式
//        if (!waterRemarkPath.endsWith("png") && !waterRemarkPath.endsWith("PNG")) {
//            throw new RuntimeException("向Excel上面打印水印，目前支持png格式的图片。");
//        }
//        // 加载图片
//        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//        InputStream imageIn = new FileInputStream(waterRemarkPath);
//        if (null == imageIn || imageIn.available() < 1) {
//            throw new RuntimeException("向Excel上面打印水印，读取水印图片失败(1)。");
//        }
//        BufferedImage bufferImg = ImageIO.read(imageIn);
//        if (null == bufferImg) {
//            throw new RuntimeException("向Excel上面打印水印，读取水印图片失败(2)。");
//        }
//        ImageIO.write(bufferImg, "png", byteArrayOut);
//        // 开始打水印
//        Drawing drawing = sheet.createDrawingPatriarch();
//        // 按照共需打印多少行水印进行循环
//        for (int yCount = 0; yCount < YCount; yCount++) {
//            // 按照每行需要打印多少个水印进行循环
//            for (int xCount = 0; xCount < XCount; xCount++) {
//                // 创建水印图片位置
//                int xIndexInteger = startXCol + (xCount * waterRemarkWidth) + (xCount * betweenXCol);
//                int yIndexInteger = startYRow + (yCount * waterRemarkHeight) + (yCount * betweenYRow);
//                /** 参数定义：第一个参数是（x轴的开始节点）；第二个参数是（是y轴的开始节点）；第三个参数是（是x轴的结束节点）；
//                 * 第四个参数是（是y轴的结束节点）；第五个参数是（是从Excel的第几列开始插入图片，从0开始计数）；
//                 * 第六个参数是（是从excel的第几行开始插入图片，从0开始计数）；第七个参数是（图片宽度，共多少列）；
//                 * 第8个参数是（图片高度，共多少行）；*/
//                ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, xIndexInteger,
//                        yIndexInteger, xIndexInteger + waterRemarkWidth, yIndexInteger + waterRemarkHeight);
//                Picture pic = drawing.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), Workbook.PICTURE_TYPE_PNG));
//                pic.resize();
//            }
//        }
//    }
}
